module.exports = {
    add(colName, data){
        // colName为要操作的集合对象
        // data表示延插入到集合中的数据，可以为数组，也可以为对象
        return new Promise((resolve, reject)=>{
            colName.insertMany(data, err=>{
                if(!err){
                    resolve();
                }else{
                    reject(err);
                }
            })
        })
    },
    remove(colName, where, num=1){
        const type = num === 1 ? "deleteOne" : "deleteMany";
        return new Promise((resolve, reject)=>{
            colName[type](where, err=>{
                if(err){
                    reject(err);
                }else{
                    resolve();
                }
            })
        })
    },
    set(colName, where, data, num=1){
        const type = num === 1 ? "updateOne" : "updateMany";
        return new Promise((resolve, reject)=>{
            colName[type](where, data, err=>{
                if(err){
                    reject(err);
                }else{
                    resolve();
                }
            })
        })
    },
    get(ops={}){
        ops.colName
        const where = ops.where || {};
        return new Promise((resolve, reject)=>{
            // 搜索，排序，分页
            if(ops.sort && ops.num!==undefined && ops.index!==undefined){
                ops.colName.find(where, {_id:0,__v:0}).sort(ops.sort).limit(ops.num).skip(ops.num * ops.index).exec((err, data)=>{
                    if(err){
                        reject(err);
                    }else{
                        resolve(data.map(val=>val._doc));
                    }
                })
            }else if(ops.sort){     // 搜索，排序
                ops.colName.find(where, {_id:0,__v:0}).sort(ops.sort).exec((err, data)=>{
                    if(err){
                        reject(err);
                    }else{
                        resolve(data.map(val=>val._doc));
                    }
                })
            }else if(ops.num!==undefined && ops.index!==undefined){
                // 搜索，分页
                ops.colName.find(where, {_id:0,__v:0}).limit(ops.num).skip(ops.num * ops.index).exec((err, data)=>{
                    if(err){
                        reject(err);
                    }else{
                        resolve(data.map(val=>val._doc));
                    }
                })
            }else{
                ops.colName.find(where, {_id:0,__v:0}).exec((err, data)=>{
                    if(err){
                        reject(err);
                    }else{
                        resolve(data.map(val=>val._doc));
                    }
                })
            }
        })
    },
    // 排序查询：所有数据
    getSort(colName, sort){
        return new Promise((resolve, reject)=>{
            colName.find({}, {_id:0,__v:0}).sort(sort).exec((err, data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data.map(val=>val._doc));
                }
            })
        })
    },
    // 分页查询：所有数据
    getPage(colName, num=5, index=0){
        return new Promise((resolve, reject)=>{
            colName.find({}, {_id:0,__v:0}).limit(num).skip(num*index).exec((err, data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data.map(val=>val._doc));
                }
            })
        })
    },
    // 分类查询
    getKind(colName, kind){
        return new Promise((resolve, reject)=>{
            colName.distinct(kind).exec((err, data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data);
                }
            })
        })
    },
    // 数量查询
    getCount(colName){
        return new Promise((resolve, reject)=>{
            colName.count().exec((err, data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data);
                }
            })
        })
    }
}